package com.hqj.demo01;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 * 构造方法的练习03
 * @author HQJ
 * 1、新建门票类 Ticket
 * 	属性String type、int price
 * 	通过构造方法来初始化属性值
 * 	其中type为门票类型：成人票、儿童票、特价票，免票等
 * 	price为门票价格 成人票50元，儿童票20元,特价票为30元，免票为0元
 *
 * 	2、新建游客类Visitor
 * 	有属性String name，int age，
 * 	double height，Ticket ticket
 * 	通过构造方法来初始化属性值
 * 	其中name为名字，age为年龄，height为身高，ticket为门票对象及游客买的门票
 * 	其中age大于3小于12为儿童票；age小于等于3岁为免票；age大于12岁为成人票，当height小于120cm的成人为特价票。
 *
 * 	3、新建动物园管理员类ZooManager
 * 	属性name,age,zooName,zooAddress
 * 	List<Visitor> list = new ArrayList<>()
 * 	通过构造方法来初始化属性值
 * 	a、有一个生成票的方法createTicket(),参数是游客对象(Visitor),返回一张票，就是传一位游客
 * 	信息到方法中，根据要求，生成一张符合该游客信息的门票
 * 	b、有添加游客方法addVisitor(),
 * 	c、有按年龄段统计游客数目的方法calcVisitorAge()，输出儿童、成人各有多少人
 * 	d、有统计动物园门票的收入方法calcTicket()。
 *
 * 	使用测试类main方法来测试执行addVisitor,calcVistorAge,calcTicket等方法
 */
public class Exercise03 {
    public static void main(String[] args) {
        ZooManager zm = new ZooManager();
        Scanner scan = new Scanner(System.in);

        while(true) {
            System.out.print("姓名:");
            String name = scan.next();
            System.out.print("年龄:");
            int age = scan.nextInt();
            System.out.print("身高:");
            int height = scan.nextInt();
            Visitor v = new Visitor(name, age, height);
            Ticket t = zm.createTicket(v);
            v.ticket = t;

            zm.addVisitor(v);

            System.out.println("是否继续输入0：否，1：是");
            if("0".equals(scan.next())){
                break;
            }
        }

        zm.calcVisitorAge();
        zm.calcTicket();
    }
}
class Ticket{
    String type;
    int price;
    public Ticket(){}

    public Ticket(String type, int price) {
        this.type = type;
        this.price = price;
    }
}

class Visitor{
    String name;
    int age;
    double height;
    Ticket ticket;

    public Visitor() {}

    public Visitor(String name, int age, double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public Visitor(String name, int age, double height, Ticket ticket) {
        this.name = name;
        this.age = age;
        this.height = height;
        this.ticket = ticket;
    }
}

class ZooManager{
    List<Visitor> list = new ArrayList<>();
    /**
     * 生成票
     * @param v
     * @return
     */
    public Ticket createTicket(Visitor v){
        Ticket t = new Ticket();
        if(v.age>12){
            t.type = "成人票";
            if(v.height<120){
                t.type += "-特价票";
                t.price = 30;
            }else{
                t.price = 50;
            }
        }else if(v.age>3&&v.age<=12){
            t.price = 20;
            t.type = "儿童票";
        }else{
            t.price = 0;
            t.type = "免费票";
        }
        return t;
    }

    /**
     * 添加游客
     * @param v
     */
    public void addVisitor(Visitor v){
        this.list.add(v);
    }

    /**
     * 统计人数年龄
     */
    public void calcVisitorAge(){
        int crs = 0,ers = 0;
        //遍历集合，获取出每一个元素，在获取年龄，判断年龄
        for(Visitor v:this.list){
            int age = v.age;
            if(age>12){
                crs++;
            }else{
                ers++;
            }
        }
        System.out.println("总共人数:"+list.size()+",其中成人:"+crs+",儿童:"+ers);
    }

    /**
     * 统计门票收入
     */
    public void calcTicket(){
        int count = 0;
        //遍历集合，获取出每一个元素，在获取门票，统计价格
        for (Visitor v:this.list){
            Ticket t = v.ticket;
            count += t.price;
        }
        System.out.println("门票收入:"+count);
    }

}